home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / COMP / TEST / VIELSTRA.I < prev   
Encoding:
Modula Implementation  |  1991-07-23  |  2.8 KB  |  124 lines

  1.  
  2. IMPLEMENTATION MODULE Vielstrahlinterferenz;
  3.  
  4. FROM MathLib0 IMPORT sin,cos,pi;
  5.  
  6.  
  7. PROCEDURE MultVV2C (A,B: Vector2C): Complex;
  8. BEGIN
  9.   RETURN Complex
  10.          {
  11.           A[0].Re*B[0].Re + A[1].Re*B[1].Re - A[0].Im*B[0].Im - A[1].Im*B[1].Im,
  12.           A[0].Re*B[0].Im + A[1].Re*B[1].Im + A[0].Im*B[0].Re + A[1].Im*B[1].Re
  13.          }
  14. END MultVV2C;
  15.  
  16. PROCEDURE MultMM2C (A,B: Matrix2C): Matrix2C;
  17. BEGIN
  18.   RETURN Matrix2C
  19.          {
  20.            MultMV2C (A,B[0]),
  21.            MultMV2C (A,B[1])
  22.          }
  23. END MultMM2C;
  24.  
  25. PROCEDURE MultMV2C (M: Matrix2C; V: Vector2C): Vector2C;
  26. BEGIN
  27.   RETURN Vector2C
  28.          {
  29.            MultVV2C ( Vector2C{ M[0,0] , M[1,0] } , V),
  30.            MultVV2C ( Vector2C{ M[0,1] , M[1,1] } , V)
  31.          }
  32. END MultMV2C;
  33.  
  34.  
  35.  
  36.  
  37. (* Berechnung der Einzelnen Matrizen aus den Stoffeigenschaften: *)
  38.  
  39. (* Übergangsmatrix H: *)
  40. PROCEDURE GetH (tau,rho: LONGREAL): Matrix2C;
  41. BEGIN
  42.   RETURN Matrix2C
  43.          {
  44.            Vector2C { Complex{1.0/tau , 0.0} , Complex {rho/tau , 0.0} },
  45.            Vector2C { Complex{rho/tau , 0.0} , Complex {1.0/tau , 0.0} }
  46.          }
  47. END GetH;
  48.  
  49. (* Ausbreitungsmatrix L: *)
  50.  
  51.  
  52. (* Das RETURN führt zum Aufhängen des Compilers!!!*)
  53. PROCEDURE GetL (n,d,lambda0: LONGREAL): Matrix2C;
  54.   VAR beta,Sinus,Cosinus: LONGREAL;
  55. BEGIN
  56.   beta := 2.0*pi*n*d/lambda0;
  57.   Sinus := sin(beta);
  58.   Cosinus := cos(beta);
  59.   
  60.   RETURN Matrix2C
  61.          {
  62.            Vector2C { Complex { Cosinus , -Sinus } , Zero },
  63.            Vector2C { Zero , Complex { Cosinus ,  Sinus } }
  64.          }
  65. END GetL;
  66. (**)
  67.  
  68. (* Interner Fehler:
  69. PROCEDURE GetL (n,d,lambda0: LONGREAL): Matrix2C;
  70.   VAR beta,Sinus,Cosinus: LONGREAL;
  71.       L: Matrix2C;
  72. BEGIN
  73.   beta := 2.0*pi*n*d/lambda0;
  74.   Sinus := sin(beta);
  75.   Cosinus := cos(beta);
  76.   
  77.   L := Matrix2C
  78.        {
  79.          Vector2C { Complex { Cosinus , -Sinus } , Zero },
  80.          Vector2C { Zero , Complex { Cosinus ,  Sinus } }
  81.          (* Fehler :     ^ *)
  82.        };
  83.   RETURN L
  84. END GetL;
  85. *)
  86.  
  87. (* Interner Fehler:
  88. PROCEDURE GetL (n,d,lambda0: LONGREAL): Matrix2C;
  89.   VAR beta,Sinus,Cosinus: LONGREAL;
  90.       L: Matrix2C;
  91. BEGIN
  92.   beta := 2.0*pi*n*d/lambda0;
  93.   Sinus := sin(beta);
  94.   Cosinus := cos(beta);
  95.   
  96.   L[0] := Vector2C { Complex { Cosinus , -Sinus } , Zero };
  97.   L[1] := Vector2C { Zero , Complex { Cosinus ,  Sinus } };
  98.                        (* ^ *)
  99.   RETURN L
  100. END GetL;
  101. *)
  102.  
  103. (* Funktioniert:
  104. PROCEDURE GetL (n,d,lambda0: LONGREAL): Matrix2C;
  105.   VAR beta,Sinus,Cosinus: LONGREAL;
  106.       L: Matrix2C;
  107. BEGIN
  108.   beta := 2.0*pi*n*d/lambda0;
  109.   Sinus := sin(beta);
  110.   Cosinus := cos(beta);
  111.   
  112.   L[0] := Vector2C { Complex { Cosinus , -Sinus } , Zero };
  113.   L[1,0] := Zero;
  114.   L[1,1] := Complex { Cosinus ,  Sinus };
  115.   
  116.   RETURN L
  117. END GetL;
  118. *)
  119.  
  120.  
  121.  
  122. END Vielstrahlinterferenz.
  123.  
  124.